// Object.defineProperty() 静态方法会直接在一个对象上定义一个新属性，或修改其现有属性，并返回此对象。

/*
  obj
  要定义属性的对象。

  prop
  一个字符串或 Symbol，指定了要定义或修改的属性键。

  descriptor
  要定义或修改的属性的描述符。
*/

const data = {
  name: "zhangsan",
  age: 20,
};

let a;
Object.defineProperty(data, "name", {
  get() {
    // get方法会在这个对象的该属性被访问时调用
    // 必须要返回一个值，这个值就会变成该属性被访问的时候的值
    // console.log("get");
    return a;
  },
  set(v) {
    // set方法会在这个对象的该属性被修改时调用
    // console.log("set", v);
    a = v;
  },
});

data.name = "wangwu";
console.log(data.name);
